package com.gaofans.vertx.boot.web.route;

import com.gaofans.vertx.boot.web.auth.AuthorityDefinition;
import io.vertx.core.Handler;
import io.vertx.core.http.HttpMethod;
import io.vertx.ext.web.RoutingContext;

/**
 * @author GaoFans
 */
public interface RouteConfigurable {

    /**
     * 获取url
     * @return
     */
    String getPath();

    /**
     * 获取方法
     * @return
     */
    HttpMethod[] getHttpMethod();

    /**
     * 获取优先级
     * @return
     */
    int getOrder();

    /**
     * 是否打开requestBody
     * @return
     */
    boolean requestBody();

    /**
     * 获取handler
     * @return
     */
    Handler<RoutingContext> getHandler();

    /**
     * 获取权限定义
     * @return
     */
    AuthorityDefinition getAuthorityDefinition();

    /**
     * 获取header
     * @return
     */
    String[] getHeaders();

    /**
     * 获取consume
     * @return
     */
    String[] getConsumes();

    /**
     * 获取produce
     * @return
     */
    String[] getProduces();

    /**
     * 获取includeHandler
     * @return
     */
    Class<? extends Handler<RoutingContext>>[] getIncludeHandlers();

    /**
     * 获取excludeHandler
     * @return
     */
    Class<? extends Handler<RoutingContext>>[] getExcludeHandlers();

    /**
     * 是否需要模板渲染
     * @return
     */
    default boolean isTemplateRender(){
        return false;
    };

    /**
     * 是否ResponseBody
     * @return
     */
    boolean isResponseBody();

}
